package br.unifor.bd.protocol;

import java.util.Iterator;
import java.util.Vector;

public class ListaDeEspera {

	private Vector<Operacao> operacoesEmEspera = new Vector<Operacao>();

	public void adicionar(Operacao operacao) {
		System.out.println("Adicionando operacao [" + operacao
				+ "] na lista de espera");
		operacoesEmEspera.add(operacao);
	}

	public boolean remover(Operacao operacao) {
		return operacoesEmEspera.remove(operacao);
	}

	public Iterator<Operacao> getLista() {
		return operacoesEmEspera.iterator();
	}

	public Vector<Operacao> removeAll() {
		Vector<Operacao> tmp = new Vector<Operacao>();
		Iterator<Operacao> it = operacoesEmEspera.iterator();

		while (it.hasNext()) {
			tmp.add(it.next());
		}

		operacoesEmEspera.clear();
		return tmp;
	}
	
	@Override
	public String toString() {
		return operacoesEmEspera.isEmpty() ? "VAZIA" : operacoesEmEspera.toString();
	}

	public void abortTransaction(String transactionId) {
		Vector<Operacao> temp = new Vector<Operacao>();
		Iterator<Operacao> it = operacoesEmEspera.iterator();

		while (it.hasNext()) {
			Operacao op = it.next();

			if (op.getIdDaTransacao() != transactionId) {
				temp.add(op);
			}
		}

		operacoesEmEspera = temp;
	}

}
